package wn.tcpip.socket.netty.business;

import com.alibaba.fastjson.JSON;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import wn.tcpip.socket.netty.business.factory.ResoverAbs;
import wn.tcpip.socket.netty.cache.NettyChannelMap;
import wn.tcpip.socket.util.ProtocolUtil;
import wn.tcpip.socket.netty.model.GPSBackRequest;
import wn.tcpip.socket.netty.model.GpsStateEntity;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.jms.*;

/**
 * Created by zhangqin on 2017/4/19.
 */
@Service
public class StateResoverImp extends ResoverAbs {
    private static  final Logger logger = LoggerFactory.getLogger(StateResoverImp.class);
    @Resource
    private Queue stateInfoQueue;
    @Resource
    private JmsTemplate jmsQueueTemplate;
    @Override
    public String getResponse(GPSBackRequest request) {
        //处理gps状态信息
        String content = request.getContent();
        String imieByChannel = NettyChannelMap.get(request.getChannel());
        if(StringUtils.isBlank(imieByChannel)){
            logger.error("没有登录--------");
            return null;
        }else{
            String sbInfo = content.substring(0, 1 * 2);// 终端信息
            byte[] sbInfoBytes = ProtocolUtil.decodeStringToBytes(sbInfo, 8);

            /**
             *
             * 注意这个代表的是二级制位，在字节数组中应该反过来。。  第0位代表第7位
             * 高位       低位    7 6 5 4 3 2 1 0
             *
             *
             * 第 0 位 0：撤防 1：设防
             * 第 1 位 0：ACC 低 1：ACC 高
             * 第 2 位 0：未接电源充电 1：已接电源充电
             * 第 3、4、5   位 000：正常 001：震动报警 010：断电报警 011：低电报警 100：SOS 求救
             * 第 6 位 0：GPS 不定位 1：GPS
             * 已定位 第
             * 7 位  0：油电接通  1：油电断开
             *
             */
            String status = null;
            String dyLevel = content.substring(1 * 2, 2 * 2);// 电压等级
            int dyLevelInt = Integer.parseInt(dyLevel, 16);

            String gsmLevel = content.substring(2 * 2, 3 * 2);// GSM 信号强度等级
            int gsmLevelInt = Integer.parseInt(gsmLevel, 16);
            GpsStateEntity gpsStateEntity = new GpsStateEntity(imieByChannel, String.valueOf(sbInfoBytes[1]));
            jmsQueueTemplate.send(stateInfoQueue, new MessageCreator() {
                @Override
                public Message createMessage(Session session) throws JMSException {
                    return session.createTextMessage(JSON.toJSONString(gpsStateEntity));
                }
            });
            return super.makeDefaultResponse(request);
        }


    }
}
